/**
 * 设置全局的AJAX请求默认选项
 * 主要设置了AJAX请求遇到Session过期的情况
 */
var ajaxSettings = new Object();
ajaxSettings.contentType = "application/x-www-form-urlencoded;charset=utf-8";
ajaxSettings.dataType = "json";
ajaxSettings.type = "post";
ajaxSettings.cache = false;
ajaxSettings.layerIndex = -1;
//在headers请求头中添加公共请求参数
//全局token
g_comm.token = localStorage.getItem("speed-test-token");
ajaxSettings.headers = {
    token: g_comm.token,//这里是Token
    ajaxRequest:true
};
ajaxSettings.beforeSend = function(XMLHttpRequest){//发送AJAX请求前触发
    //Ajax全局加载框(Loading效果)的配置
    this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] ,zIndex :2147483647});
};
ajaxSettings.error = function (XMLHttpRequest, textStatus, errorThrown){//请求失败遇到异常触发
    if(XMLHttpRequest.status == 504){
        layer.msg('操作失败：当前网络环境较差，请重试', {icon: 0});
    }else if ( XMLHttpRequest.status == 400){
        var responseJSON = XMLHttpRequest.responseJSON;
        if(responseJSON && responseJSON.errors && responseJSON.errors[0] && responseJSON.errors[0].defaultMessage){
            layer.msg(responseJSON.errors[0].defaultMessage,{icon:0})
        }
    }else if ( XMLHttpRequest.status == 401){
        layer.msg('操作失败：您没有访问权限，请登录后重试', {icon: 5});
    }else if ( XMLHttpRequest.status == 500){
        layer.msg('操作失败：系统异常，请联系管理员', {icon: 5});
    }else {
        layer.msg('网络请求错误，请联系管理员！', {icon: 5});
    }
    return false;
};
ajaxSettings.complete = function(XMLHttpRequest,textStatus){//请求完成时运行的函数（在请求成功或失败之后均调用，即在 success 和 error 函数之后）
    layer.close(this.layerIndex);
    var loginStatus = XMLHttpRequest.getResponseHeader("loginStatus"); //通过XMLHttpRequest取得响应头loginStatus
    var permissionLimit = XMLHttpRequest.getResponseHeader("permissionLimit"); //通过XMLHttpRequest取得响应头permissionLimit
    if(loginStatus=='timeout'){
        //如果超时就处理 ，指定要跳转的页面
        var top = getTopWinow(); //获取当前页面的顶层窗口对象
        top.layer = layer;
        top.layer.alert("尊敬的用户，页面已经过期，请重新登录",
            {
                icon:5,
                title:"温馨提示",
                closeBtn:0//不显示弹出框右上角的关闭按钮
            },
            function(){
                clearToken();//清空本地token信息
                top.location.href="views/login.html"; //跳转到登录页面
            });
        return;
    }

    if(permissionLimit=='permissionLimit'){//没有访问权限
        //如果超时就处理 ，指定要跳转的页面
        var top = getTopWinow(); //获取当前页面的顶层窗口对象
        top.layer = layer;
        top.layer.alert("没有访问权限，请联系管理员授权",
            {
                icon:5,
                title:"温馨提示",
                closeBtn:0//不显示弹出框右上角的关闭按钮
            },
            function(){
                clearToken();//清空本地token信息
                top.location.href="views/login.html"; //跳转到登录页面
            });
    }

};
$.ajaxSetup(ajaxSettings);
$layui.ajaxSetup(ajaxSettings);

/**
 * 清除token
 */
function clearToken() {
    //删除本地token
    localStorage.removeItem("speed-test-token");
    //清空本地用户信息
    localStorage.removeItem("loginUserInfo");
    //清空权限信息
    localStorage.removeItem("speed-test-perms");
}

/**
 * 在页面中任何嵌套层次的窗口中获取顶层窗口
 * @return 当前页面的顶层窗口对象
 */
function getTopWinow(){
    var p = window;
    while(p != p.parent){
        p = p.parent;
    }
    return p;
}
//处理键盘事件 禁止后退键（Backspace）密码或单行、多行文本框除外
function forbidBackSpace(e) {
    var ev = e || window.event; //获取event对象
    var obj = ev.target || ev.srcElement; //获取事件源
    var t = obj.type || obj.getAttribute('type'); //获取事件源类型
    //获取作为判断条件的事件类型
    var vReadOnly = obj.readOnly;
    var vDisabled = obj.disabled;
    //处理undefined值情况
    vReadOnly = (vReadOnly == undefined) ? false : vReadOnly;
    vDisabled = (vDisabled == undefined) ? true : vDisabled;
    //当敲Backspace键时，事件源类型为密码或单行、多行文本的，
    //并且readOnly属性为true或disabled属性为true的，则退格键失效
    var flag1 = ev.keyCode == 8 && (t == "password" || t == "text" || t == "textarea" || t == "search") && (vReadOnly == true || vDisabled == true);
    //当敲Backspace键时，事件源类型非密码或单行、多行文本的，则退格键失效
    var flag2 = ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea" && t != "search";//search 是select2控件的输入框type
    //判断
    if (flag2 || flag1) {
        //ie
        ev.returnValue = false;
        return false;
    }
}
//禁止后退键 作用于Firefox、Opera
document.onkeypress = forbidBackSpace;
//禁止后退键  作用于IE、Chrome
document.onkeydown = forbidBackSpace;
//系统后台名称
$(".systemName").html(g_comm.systemName);

/**
 * 权限判断
 */
hasPermission();
/**
 * 根据登录用户权限来显示操作按钮
 */
function hasPermission() {
    $("[data-check-permission]").each(function(n, obj){
        var permission = $(obj).attr('data-check-permission');
        if(g_comm.perms.indexOf(permission) > -1){
            $(obj).show(); //显示元素
        }else {
            //$(obj).hide(); //隐藏元素
            $(obj).remove();//删除元素
        }
    });
}
